﻿using System;
using System.Data;
using System.Windows.Forms;
using Telerik.WinControls.UI;
using Zvezda.FSO2.DB;

namespace FSO
{
    public partial class FormNSIProduct : Form, IntefaceObjectForm
    {
        public FormNSIProduct()
        {
            InitializeComponent();
        }

        private void FormNSIProduct_Load(object sender, EventArgs e)
        {
            nsI_PRODUCTTableAdapter1.Fill(dataSetFSO1.NSI_PRODUCT);
            
            radGridViewProduct.DataSource = dataSetFSO1.NSI_PRODUCT;

            GridViewTextBoxColumn colCode = new GridViewTextBoxColumn("CODE", dataSetFSO1.NSI_PRODUCT.CODEColumn.ColumnName);
            colCode.HeaderText = "Код изделия";

            GridViewTextBoxColumn colShortName = new GridViewTextBoxColumn("SHORT_NAME", dataSetFSO1.NSI_PRODUCT.SHORT_NAMEColumn.ColumnName);
            colShortName.HeaderText = "Короткое наименование";

            GridViewTextBoxColumn colFullName = new GridViewTextBoxColumn("FULL_NAME", dataSetFSO1.NSI_PRODUCT.FULL_NAMEColumn.ColumnName);
            colFullName.HeaderText = "Полное наименование";

			//GridViewTextBoxColumn colProductGroup = new GridViewTextBoxColumn("PROD_GROUP", dataSetFSO1.NSI_PRODUCT.PROD_GROUPColumn.ColumnName);
			//colProductGroup.HeaderText = "Группа продукции";

            GridViewTextBoxColumn colDrawingNumber = new GridViewTextBoxColumn("N_DRAWING", dataSetFSO1.NSI_PRODUCT.N_DRAWINGColumn.ColumnName);
            colDrawingNumber.HeaderText = "№ чертежа";

            //Заполняем единицы измерения
            nsI_METERTableAdapter1.Fill(dataSetFSO1.NSI_METER);
            GridViewComboBoxColumn colMeter = new GridViewComboBoxColumn("NSI_METER_ID", dataSetFSO1.NSI_PRODUCT.NSI_METER_IDColumn.ColumnName);
            colMeter.HeaderText = "Ед. измерения";
            colMeter.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDown;
            colMeter.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
            colMeter.DataSource = dataSetFSO1.NSI_METER;
            colMeter.ValueMember = dataSetFSO1.NSI_METER.IDColumn.ColumnName;
            colMeter.DisplayMember = dataSetFSO1.NSI_METER.SHORT_NAMEColumn.ColumnName;

			//Заполняем группы товаров
			nsI_PRODUCT_GROUPTableAdapter1.Fill(dataSetFSO1.NSI_PRODUCT_GROUP);
			GridViewComboBoxColumn colProductGroup = new GridViewComboBoxColumn("PROD_GROUP", dataSetFSO1.NSI_PRODUCT.PROD_GROUPColumn.ColumnName);
			colProductGroup.HeaderText = "Группа продукции";
			colProductGroup.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDown;
			colProductGroup.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
			colProductGroup.DataSource = dataSetFSO1.NSI_PRODUCT_GROUP;
			colProductGroup.ValueMember = dataSetFSO1.NSI_PRODUCT_GROUP.IDColumn.ColumnName;
			colProductGroup.DisplayMember = dataSetFSO1.NSI_PRODUCT_GROUP.NAMEColumn.ColumnName;

			GridViewTextBoxColumn colProductGroupName = new GridViewTextBoxColumn("PROD_GROUP_NAME", dataSetFSO1.NSI_PRODUCT.NSI_PROD_GROUP_NAMEColumn.ColumnName);
			colProductGroupName.IsVisible = false;

            radGridViewProduct.MasterTemplate.Columns.Clear();
            radGridViewProduct.MasterTemplate.Columns.Add(colCode);
            radGridViewProduct.MasterTemplate.Columns.Add(colShortName);
            radGridViewProduct.MasterTemplate.Columns.Add(colFullName);
            radGridViewProduct.MasterTemplate.Columns.Add(colMeter);
            radGridViewProduct.MasterTemplate.Columns.Add(colProductGroup);
            radGridViewProduct.MasterTemplate.Columns.Add(colDrawingNumber);
			radGridViewProduct.MasterTemplate.Columns.Add(colProductGroupName);

            radGridViewProduct.MasterTemplate.MultiSelect = true;
        }

		void radGridViewProduct_UserAddingRow(object sender, Telerik.WinControls.UI.GridViewRowCancelEventArgs e)
		{
			e.Rows[0].Cells[6].Value = "temp";
		}

        public int Save()
        {
            int nRowsUpdatedCount = 0;

            //nRowsUpdatedCount += nsI_PRODUCTTableAdapter1.Update(dataSetFSO1.NSI_PRODUCT);
			for (int i = 0; i < dataSetFSO1.NSI_PRODUCT.Rows.Count; i++)
            {
				DataSetFSO.NSI_PRODUCTRow row = (DataSetFSO.NSI_PRODUCTRow)dataSetFSO1.NSI_PRODUCT.Rows[i];
                if (row.RowState == DataRowState.Modified)
                {
                    nsI_PRODUCTTableAdapter1.Update(row);
                    nsI_PRODUCTTableAdapter1.UpdatePrUnitName(row.ID);
                }
                else
                {
                    nsI_PRODUCTTableAdapter1.Update(row);
                }
            }
            return nRowsUpdatedCount;

        }

        private void FormNSIProduct_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (dataSetFSO1.NSI_PRODUCT.GetChanges() != null)
            {
                DialogResult result = MessageBox.Show(this, "Были внесены изменения. Сохранить?", "Сохранить изменения?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
                if (result == DialogResult.Yes)
                {
                    this.Save();
                }
                else if (result == DialogResult.Cancel)
                {
                    e.Cancel = true;
                }
                else
                {
                    dataSetFSO1.NSI_PRODUCT.RejectChanges();
                }
            }
        }

        private void radGridViewProduct_CurrentRowChanged(object sender, CurrentRowChangedEventArgs e)
        {
            //Была ли выделенная предыдущая строка (ошибка вызывается при открытии формы), все действия происходят с предыдущей выделенной строкой 
            if (e.OldRow != null)
            {
                DataRowView drv = e.OldRow.DataBoundItem as DataRowView;
                if (drv != null && drv.Row != null && drv.Row is DataSetFSO.NSI_PRODUCTRow)
                {
                    DataSetFSO.NSI_PRODUCTRow rowProduct = drv.Row as DataSetFSO.NSI_PRODUCTRow;

                    if (rowProduct.RowState == DataRowState.Modified && (int)nsI_PRODUCTTableAdapter1.HasLinkProduct(rowProduct.ID) > 0)
                    {
                        DialogResult result = MessageBox.Show(this, "Изменения отразятся на связанных объектах! Принять изменения?", "Принять изменения?", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                        if (result == DialogResult.No)
                        {
                            rowProduct.RejectChanges();
                        }
                        else
                        {
                            nsI_PRODUCTTableAdapter1.Update(rowProduct);
                            nsI_PRODUCTTableAdapter1.UpdatePrUnitName(rowProduct.ID);
                            //rowProduct.AcceptChanges();
                        }
                    }
                }
            }
        }




        #region IntefaceObjectForm Members

        public string FormName
        {
            get { return "NSI_Product"; }
        }

        #endregion

        private void radGridViewProduct_UserDeletingRow(object sender, GridViewRowCancelEventArgs e)
        {
            DialogResult result = MessageBox.Show(this, "Вы действительно хотите удалить данную запись(и)?", "Подтверждение удаления", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

            if (result == DialogResult.No)
            {
                e.Cancel = true;
            }
            else
            {
                foreach (GridViewRowInfo ri in e.Rows)
                {
                    DataRowView drv = ri.DataBoundItem as DataRowView;
                    DataSetFSO.NSI_PRODUCTRow row = drv.Row as DataSetFSO.NSI_PRODUCTRow;

					if (row != null && row.ID != -1 && (int)nsI_PRODUCTTableAdapter1.HasLinkProduct(row.ID) > 0)
                    {
                        MessageBox.Show(this, "Невозможно удалить один или несколько объектов!", "Ошибка удаления", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        e.Cancel = true;
                        break;
                    }

                }
            }
        }

        #region IntefaceObjectForm Members


        public int RefreshForm()
        {
            nsI_METERTableAdapter1.Fill(dataSetFSO1.NSI_METER);
			nsI_PRODUCT_GROUPTableAdapter1.Fill(dataSetFSO1.NSI_PRODUCT_GROUP);
            return nsI_PRODUCTTableAdapter1.Fill(dataSetFSO1.NSI_PRODUCT);
        }

        #endregion
    }
}
